package com.liming.cart.client;

import com.liming.common.pojo.dto.cart.AddItemToCartDTO;
import com.liming.common.pojo.vo.cart.openfeign.FeignProductInCartVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 购物车 OpenFeign客户端
 *
 * @author liming
 * @date 2025/1/21
 */
@FeignClient(value = "cart-service", contextId = "cartClient", path = "/service/cart")
public interface CartClient {

    /**
     * 获取用户购物车中的商品列表
     *
     * @return 商品列表
     */
    @GetMapping
    List<FeignProductInCartVO> getProductInCart();

    /**
     * 新增商品到购物车
     *
     * @param dto 新增信息
     * @return 是否新增成功
     */
    @PostMapping("addItem")
    Boolean addItemToCart(@RequestBody AddItemToCartDTO dto);

    /**
     * 减少购物车中商品数量
     *
     * @param id 购物车项Id
     * @return 减少是否成
     */
    @PutMapping("reduceItem/{id}")
    Boolean reduceItemById(@PathVariable Long id);

    /**
     * 增加购物车中商品数量
     *
     * @param id 购物车项ID
     * @return 增加是否成功
     */
    @PutMapping("addItem/{id}")
    Boolean addItemById(@PathVariable Long id);

    /**
     * 删除购物车中商品项
     *
     * @param ids 商品项ID集合
     * @return 删除是否成功
     */
    @DeleteMapping("removeItems")
    Boolean removeItemsByIds(@RequestBody List<Long> ids);

    /**
     * 根据商品ID删除购物车中商品项
     *
     * @param productIds 商品IDS
     * @return 删除是否成功
     */
    @DeleteMapping("removeItemsByProductIds")
    Boolean removeItemsByProductIds(@RequestBody List<Long> productIds);
}
